<?php
namespace zake\foundation\able;

use zake\foundation\able\reactor\ConnectAble;
use zake\foundation\able\stream\ReadBufferAble;

/**
 * Interface ProtocolAble
 * @package zaka\foundation\able
 *
 * @author liu.bin 2020-03-28 21:35
 */
interface ProtocolAble
{

    /**
     * 计算frameLength
     *
     * @param string $buffer
     * @param ReadBufferAble $connect
     *
     * @return int|false
     *          int - 数据包长度（0-没有获取到长度）
     *          false - 数据包错误，需要关闭当前链接
     * @author liu.bin 2020-05-19 16:29
     */
    public function framePoint($buffer,ReadBufferAble $connect);



    /**
     * 解包 格式化输出数据包的内容
     *
     * 比如http协议：可以格式化$_GET ,$_POST，header等等
     *
     * @param string $buffer
     * @return string
     */
    public function decode($buffer,ConnectAble $stream=null);


    /**
     * 数据打包
     *
     * 比如http协议，buffer只为http的body部分，此处需要添加http的header部分
     *
     * @param string $buffer
     * @return string
     */
    public function encode($buffer,ConnectAble $stream=null);
}